
package GUI;

import java.awt.Graphics;
import java.awt.Image;
import java.awt.image.ImageObserver;
import java.io.File;
import java.io.IOException;
import java.util.ArrayList;
import javax.imageio.ImageIO;

public class Ficha implements InterfaceFichas{
    
    private int x,y,xCanvas,yCanvas,ancho=70,alto=70;
    private Image imagen;
    private String color,tipo;

    public Ficha(int x,int y,String color,String tipo){
        this.x = x;
        this.y = y;
        this.color = color;
        this.tipo = tipo;
        this.xCanvas = 417 -(6-y)*ancho;
        this.yCanvas = 417 -(6-x)*alto;
        determinarImagen();
    }
    
    @Override
    public boolean estaDentro(int x, int y) {
        
        if ((x > this.xCanvas) && (x <= (this.xCanvas + ancho)) && (y > this.yCanvas) &&(y < (this.yCanvas + alto))){
            return true;
        }
        return false;
    }

    @Override
    public int getX() {
        return this.x;
    }

    @Override
    public int getY() {
        return this.y;
    }

    @Override
    public int getXcanvas(){
        return this.xCanvas;
    }

    @Override
    public int getYcanvas(){
        return this.yCanvas;
    }
    
    @Override
    public String getColor() {
        return this.color;
    }
    
    @Override
    public String getTipo() {
        return this.tipo;
    }

    @Override
    public void setPosicion(int x, int y) {
        this.x=x;
        this.y=y;
        this.xCanvas = 417 -(6-y)*ancho;
        this.yCanvas = 417 -(6-x)*alto;
    }

    @Override
    public void setPosicionCanvas(int x,int y){
        this.xCanvas=x;
        this.yCanvas=y;
    }
    
    private void determinarImagen(){
        try {
            if(tipo.equals("Peon"))
        {
            if(color.equals("Negro")){
                imagen= ImageIO.read(new File("img/PeonN.png"));
            } else if(color.equals("Blanco")){
                imagen= ImageIO.read(new File("img/PeonB.png"));
            }
        }else if(tipo.equals("Alfil"))
        {
            if(color.equals("Negro")){
                imagen= ImageIO.read(new File("img/AlfilN.png"));
            } else if(color.equals("Blanco")){
                imagen= ImageIO.read(new File("img/AlfilB.png"));
            }
        }else if(tipo.equals("Caballo"))
        {
            if(color.equals("Negro")){
                imagen= ImageIO.read(new File("img/CaballoN.png"));
            } else if(color.equals("Blanco")){
                imagen= ImageIO.read(new File("img/CaballoB.png"));
            }
        }else if(tipo.equals("Rey"))
        {
            if(color.equals("Negro")){
                imagen= ImageIO.read(new File("img/ReyN.png"));
            } else if(color.equals("Blanco")){
                imagen= ImageIO.read(new File("img/ReyB.png"));
            }
        } else if(tipo.equals("Reina"))
        {
            if(color.equals("Negro")){
                imagen= ImageIO.read(new File("img/ReinaN.png"));
            } else if(color.equals("Blanco")){
                imagen= ImageIO.read(new File("img/ReinaB.png"));
            }
        }
        } catch (IOException e) {
            System.out.println("Error al cargar las imagenes");
        }
    }

    @Override
    public ArrayList<int[]> posiblesMovimientos(){
        ArrayList<int[]> resultado = new ArrayList();
            if(tipo.equals("Peon")){
                if(color.equals("Negro")){
                    if(x-1>=0){
                        resultado.add(new int[]{x-1,y});
                        resultado.add(new int[]{x-1,y-1});
                        resultado.add(new int[]{x-1,y+1});
                    }
                   
                }
                if(color.equals("Blanco")){
                    if(x+1<6){
                        resultado.add(new int[]{x+1,y});
                        resultado.add(new int[]{x+1,y-1});
                        resultado.add(new int[]{x+1,y+1});
                    }
                }
            }
        if(tipo.equals("Alfil")){
                int xia=this.x,yia=this.y;
                while(xia>0&&yia>0){
                    resultado.add(new int[]{--xia,--yia});
                }
                int xid=this.x,yid=this.y;
                while(xid<5&&yid>0){
                    resultado.add(new int[]{++xid,--yid});
                }
                int xda=this.x,yda=this.y;
                while(xda>0&&yda<5){
                    resultado.add(new int[]{--xda,++yda});
                }
                int xdd=this.x,ydd=this.y;
                while(xdd<5&&ydd<5){
                    resultado.add(new int[]{++xdd,++ydd});
                }
            }
        if(tipo.equals("Reina")){
            int xia=this.x,yia=this.y;
                while(xia>0&&yia>0){
                    resultado.add(new int[]{--xia,--yia});
                }
                int xid=this.x,yid=this.y;
                while(xid<5&&yid>0){
                    resultado.add(new int[]{++xid,--yid});
                }
                int xda=this.x,yda=this.y;
                while(xda>0&&yda<5){
                    resultado.add(new int[]{--xda,++yda});
                }
                int xdd=this.x,ydd=this.y;
                while(xdd<5&&ydd<5){
                    resultado.add(new int[]{++xdd,++ydd});
                }
                int d=this.y;
                while(d<5){
                    resultado.add(new int[]{x,++d});
                }
                int i=this.y;
                while(i>0){
                    resultado.add(new int[]{x,--i});
                }
                int u=this.x;
                while(u<5){
                    resultado.add(new int[]{++u,y});
                }
                int down=this.x;
                while(down>0){
                    resultado.add(new int[]{--down,y});
                }
        }
        if(tipo.equals("Rey")){
            int xd=this.x+1,yd=this.y+1,xa=this.x-1,ya=this.y-1;
            if(xd<6){
                resultado.add(new int[]{xd,this.y});
                if(ya>=0){
                    resultado.add(new int[]{xd,ya});
                }
                if(yd<6){
                    resultado.add(new int[]{xd,yd});
                }
            }
            if(xa>=0){
                resultado.add(new int[]{xa,this.y});
                if(ya>=0){
                    resultado.add(new int[]{xa,ya});
                }
                if(yd<6){
                    resultado.add(new int[]{xa,yd});
                }
            }
            if(ya>=0){
                resultado.add(new int[]{this.x,ya});
            }
            if(yd<6){
                resultado.add(new int[]{this.x,yd});
            }
        }
        if(tipo.equals("Caballo")){
            if(x+2<6&&y+1<6){
                resultado.add(new int[]{x+2,y+1});
            }
            if(x+2<6&&y-1>=0){
                resultado.add(new int[]{x+2,y-1});
            }
            if(x-2>=0&&y+1<6){
                resultado.add(new int[]{x-2,y+1});
            }
            if(x-2>=0&&y-1>=0){
                resultado.add(new int[]{x-2,y-1});
            }
            if(x-1>=0&&y-2>=0){
                resultado.add(new int[]{x-1,y-2});
            }
            if(x-1>=0&&y+2<6){
                resultado.add(new int[]{x-1,y+2});
            }
            if(x+1<6&&y-2>=0){
                resultado.add(new int[]{x+1,y-2});
            }
            if(x+1<6&&y+2<6){
                resultado.add(new int[]{x+1,y+2});
            }
        }
        return resultado;
    }
    
    @Override
    public void pintar(Graphics g,ImageObserver im) {
        g.drawImage(imagen, xCanvas, yCanvas,ancho,alto, im);
    }
}
